package com.odontosis.util;

import java.applet.Applet;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.PrintJob;
import java.awt.Toolkit;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;

import com.odontosis.dto.ParametrosFiodDto;

/**
 * Impressão na FIOD
 * 
 * @author Pablo Henrique dos Reis
 *
 */
public class AppletImpressaoFiod  extends Applet {
	
	private JLabel label;
	
	private JPanel panel;
	
	private List<String> texto;
	
	private ParametrosFiodDto parametro;
	


	public void init() {

		inicializarParametros();
		//inicializarParametrosTeste();

		panel = new JPanel();
		
		panel.setBounds(600, 100, 100, 100);
		panel.setSize(100, 100);
		
		ImageIcon imgFundo = new ImageIcon(getClass().getResource("impressora0019.gif"));
		
		label = new JLabel();
		label.setIcon(imgFundo);
		panel.add(label);

		add(panel);
		
		imprimir();

	}
	
	public void imprimir() {
		
		if(texto.size() != 31) {
			try {

				getAppletContext().showDocument(new URL("javascript:falha('erro-parametros');"));

			} catch (MalformedURLException excpetion) {
				excpetion.printStackTrace();
			}
		} 
		
		if(texto.size() == 31) {
		
			String nomeCredenciado = texto.get(0);
			String cpfCredenciado = texto.get(1);
			String matriculaPaciente = texto.get(2);
			String cartaoPaciente = texto.get(3);
			String nomePaciente = texto.get(4);
			String tratamento1 = texto.get(5);
			String tratamento2 = texto.get(6);
			String tratamento3 = texto.get(7);
			String tratamento4 = texto.get(8);
			String tratamento5 = texto.get(9);
			String tratamento6 = texto.get(10);
			String tratamento7 = texto.get(11);
			String tratamento8 = texto.get(12);
			String tratamento9 = texto.get(13);
			String tratamento10 = texto.get(14);
			
			String valor1 = texto.get(15);
			String valor2 = texto.get(16);
			String valor3 = texto.get(17);
			String valor4 = texto.get(18);
			String valor5 = texto.get(19);
			String valor6 = texto.get(20);
			String valor7 = texto.get(21);
			String valor8 = texto.get(22);
			String valor9 = texto.get(23);
			String valor10 = texto.get(24);
			
			String valorTotal = texto.get(25);
			String nomeSolicitante = texto.get(26);
			String cpfSolicitante = texto.get(27);
			String croSolicitante = texto.get(28);
			String uf = texto.get(29);
			String dataSolicitacao = texto.get(30);
			
			
			
			
			// cria um frame temporário, onde será  desenhado  o texto a ser impresso     
		    Frame f = new Frame("Frame temporário para a impressão");     
		    f.pack();      
		    
		    
		    // pega o Toolkit do Frame     
		    Toolkit tk = f.getToolkit();      
		    
		    
		    // Pega os serviços de impressão existentes no computador,     
		    // para que seja escolhida uma impressora.    
		    // Também pode ser uma impressora de rede   
		    PrintJob pj = tk.getPrintJob(f,  "fiod" , null);
		    String t1 = getParameter("t1");
		    String t2 = getParameter("t2");
		    int tamanho1 = (t1 != null && !t1.trim().equals("") ? Integer.parseInt(t1) : 10);
		    int tamanho2 = (t2 != null && !t2.trim().equals("") ? Integer.parseInt(t2) : 6);
		    
		    //15 = meio centimetro
		    String copias = getParameter("copias");
		    int ncopias = (copias != null && !copias.trim().equals("") ? Integer.parseInt(copias) : 1);
		    
		    // Aqui se inicia a impressão   
		    if (pj != null) {    
		    	
		       for(int i = 0; i < ncopias; i++) {	
			       Graphics g = pj.getGraphics();  
			       g.setFont(new Font("Courier New",Font.PLAIN,12));
			       g.setFont(new Font("Courier New",Font.PLAIN,tamanho1));
			       
			       if(parametro.getPessoaFisica() == null || parametro.getPessoaFisica().equals(0)) {
			    	   g.drawString( "x" , parametro.getColunaPessoajuridica(), parametro.getLinhaPessoajuridica()); //pesoa jurídica
			       } else {
			    	   g.drawString( "x" , parametro.getColunaPessoafisica(), parametro.getLinhaPessoafisica()); //pessoa física
			       }
			       
			       
			       
			       g.drawString( cpfCredenciado , parametro.getColunaCPFCredenciado(), parametro.getLinhaCredenciado()); //cpf do credenciado ok
			       g.drawString( nomeCredenciado , parametro.getColunaNomeCredenciado(), parametro.getLinhaCredenciado()); //nome do credenciado ok
			       
			       g.drawString( matriculaPaciente , parametro.getColunaMatriculaPaciente(), parametro.getLinhaPaciente()); //matricula ok
			       g.drawString( cartaoPaciente , parametro.getColunaCartaoPaciente(), parametro.getLinhaPaciente()); //cartao
			       g.drawString( nomePaciente , parametro.getColunaNomePaciente(), parametro.getLinhaPaciente()); //nome do paciente ok
			       
			       g.setFont(new Font("Courier New",Font.PLAIN,tamanho2));
			       //exibir procedimento, numero parcela e mes/ano referente  
			       g.drawString( tratamento1 , parametro.getColunaTratamento1(), parametro.getLinhaTratamento1()); //procedimento ok    
			       g.drawString( tratamento2 , parametro.getColunaTratamento1(), parametro.getLinhaTratamento2()); //procedimento ok 
			       g.drawString( tratamento3 , parametro.getColunaTratamento1(), parametro.getLinhaTratamento3()); //procedimento ok
			       g.drawString( tratamento4 , parametro.getColunaTratamento1(), parametro.getLinhaTratamento4()); //procedimento ok
			       g.drawString( tratamento5 , parametro.getColunaTratamento1(), parametro.getLinhaTratamento5()); //procedimento ok
			       
			       
			       g.drawString( tratamento6 , parametro.getColunaTratamento2(), parametro.getLinhaTratamento1()); //procedimento ok     
			       g.drawString( tratamento7 , parametro.getColunaTratamento2(), parametro.getLinhaTratamento2()); //procedimento ok
			       g.drawString( tratamento8 , parametro.getColunaTratamento2(), parametro.getLinhaTratamento3()); //procedimento ok
			       g.drawString( tratamento9 , parametro.getColunaTratamento2(), parametro.getLinhaTratamento4()); //procedimento ok
			       g.drawString( tratamento10 ,parametro.getColunaTratamento2(), parametro.getLinhaTratamento5()); //procedimento ok
			       
			       g.setFont(new Font("Courier New",Font.PLAIN,tamanho1));
			       g.drawString( valor1 , parametro.getColunaValor1(), parametro.getLinhaValor1()); //valor ok  
			       g.drawString( valor2 , parametro.getColunaValor1(), parametro.getLinhaValor2()); //valor ok
			       g.drawString( valor3 , parametro.getColunaValor1(), parametro.getLinhaValor3()); //valor ok
			       g.drawString( valor4 , parametro.getColunaValor1(), parametro.getLinhaValor4()); //valor ok
			       g.drawString( valor5 , parametro.getColunaValor1(), parametro.getLinhaValor5()); //valor ok
			       
			       g.drawString( valor6 , parametro.getColunaValor2(), parametro.getLinhaValor1()); //valor ok   
			       g.drawString( valor7 , parametro.getColunaValor2(), parametro.getLinhaValor2()); //valor ok
			       g.drawString( valor8 , parametro.getColunaValor2(), parametro.getLinhaValor3()); //valor ok
			       g.drawString( valor9 , parametro.getColunaValor2(), parametro.getLinhaValor4()); //valor ok
			       g.drawString( valor10 ,parametro.getColunaValor2(), parametro.getLinhaValor5()); //valor ok
			       
			       g.drawString( valorTotal , parametro.getColunaValorTotal(), parametro.getLinhaValorTotal()); //valor total do tratamentos ok 
			       g.drawString( nomeSolicitante , parametro.getColunaNomeSolicitante(), parametro.getLinhaSolicitante()); //nome do profissional solicitante ok
			       g.drawString( croSolicitante , parametro.getColunaCRO(), parametro.getLinhaSolicitante()); //cro solicitante 445
			       g.drawString( dataSolicitacao , parametro.getColunaDataSolicitacao(), parametro.getLinhaDataSolicitacao()); //data da solicitação ok
			       
			       g.drawString( cpfSolicitante , parametro.getColunaCpfSolicitante(), parametro.getLinhaSolicitante()); //cpf do profissional ok
			       g.drawString( uf , parametro.getColunaUF(), parametro.getLinhaUF()); //sigla estado ok 
			       
			           
			       g.drawString( "." , 500, 810);      //nunca imprime a ultima linha
			   
			       // libera os recursos gráficos    
			       g.dispose();
		       }
		       // encerra a impressão    
		       pj.end();
		       
				try {
					System.out.println("Impressão concluída.");
					getAppletContext().showDocument(new URL("javascript:sucesso();"));
		
				} catch (MalformedURLException excpetion) {
					excpetion.printStackTrace();
				}
		    }  else {
		    	System.out.println("Impressora não selecionada.");
		    	try {
					
					getAppletContext().showDocument(new URL("javascript:falha('erro-impressora');"));
		
				} catch (MalformedURLException excpetion) {
					excpetion.printStackTrace();
				}
		    }
		   
		    // desfaz o frame temporário   
		    f.dispose();   
		    
		    
			
		
		}
		
	}
	
	public void inicializarParametrosTeste() {
		texto = new ArrayList<String>();
		for (int i = 0; i < 31; i++) {
			texto.add(new Integer(i).toString());
		}
		
		parametro = new ParametrosFiodDto();
		parametro.setColunaCartaoPaciente(155);
		parametro.setColunaCPFCredenciado(180);
		parametro.setColunaCpfSolicitante(3402);
		parametro.setColunaDataSolicitacao(30);
		parametro.setColunaMatriculaPaciente(50);
		parametro.setColunaNomeCredenciado(330);
		parametro.setColunaNomePaciente(335);
		parametro.setColunaNomeSolicitante(30);
		parametro.setColunaTratamento1(195);
		parametro.setColunaTratamento2(210);
		parametro.setColunaUF(550);
		parametro.setColunaValor1(245);
		parametro.setColunaValor2(530);
		parametro.setColunaValorTotal(285);
		parametro.setLinhaCredenciado(115);
		parametro.setLinhaDataSolicitacao(345);
		parametro.setLinhaPaciente(145);
		parametro.setLinhaSolicitante(310);
		parametro.setLinhaTratamento1(195);
		parametro.setLinhaTratamento2(210);
		parametro.setLinhaTratamento3(225);
		parametro.setLinhaTratamento4(240);
		parametro.setLinhaTratamento5(255);
		parametro.setLinhaUF(305);
		parametro.setLinhaValor1(195);
		parametro.setLinhaValor2(210);
		parametro.setLinhaValor3(225);
		parametro.setLinhaValor4(240);
		parametro.setLinhaValor5(255);
		parametro.setLinhaValorTotal(285);
		parametro.setPessoaFisica(1);
		parametro.setLinhaPessoafisica(83);
		parametro.setLinhaPessoajuridica(83);
		parametro.setColunaPessoafisica(108);
		parametro.setColunaPessoajuridica(118);
		parametro.setColunaCRO(445);

	}

	
	public void inicializarParametros() {
		texto = new ArrayList<String>();
		int i = 0;
		while (i <= 100) {
			try {
				int indice = i+1;
				String conteudoLinha = getParameter("parametro" + indice);
				if (conteudoLinha == null) {
					break;
				}
				texto.add(i,conteudoLinha);
				i++;
			} catch (Exception eop) {
				break;
			}
		}
		
		try {
			parametro = new ParametrosFiodDto();
			parametro.setColunaCartaoPaciente(converterParaInteiro( getParameter("colunaCartaoPaciente")));
			parametro.setColunaCPFCredenciado(converterParaInteiro( getParameter("colunaCPFCredenciado")));
			parametro.setColunaCpfSolicitante(converterParaInteiro( getParameter("colunaCpfSolicitante")));
			parametro.setColunaDataSolicitacao(converterParaInteiro( getParameter("colunaDataSolicitacao")));
			parametro.setColunaMatriculaPaciente(converterParaInteiro( getParameter("colunaMatriculaPaciente")));
			parametro.setColunaNomeCredenciado(converterParaInteiro( getParameter("colunaNomeCredenciado")));
			parametro.setColunaNomePaciente(converterParaInteiro( getParameter("colunaNomePaciente")));
			parametro.setColunaNomeSolicitante(converterParaInteiro( getParameter("colunaNomeSolicitante")));
			parametro.setColunaTratamento1(converterParaInteiro( getParameter("colunaTratamento1")));
			parametro.setColunaTratamento2(converterParaInteiro( getParameter("colunaTratamento2")));
			parametro.setColunaUF(converterParaInteiro( getParameter("colunaUF")));
			parametro.setColunaValor1(converterParaInteiro( getParameter("colunaValor1")));
			parametro.setColunaValor2(converterParaInteiro( getParameter("colunaValor2")));
			parametro.setColunaValorTotal(converterParaInteiro( getParameter("colunaValorTotal")));
			parametro.setLinhaCredenciado(converterParaInteiro( getParameter("linhaCredenciado")));
			parametro.setLinhaDataSolicitacao(converterParaInteiro( getParameter("linhaDataSolicitacao")));
			parametro.setLinhaPaciente(converterParaInteiro( getParameter("linhaPaciente")));
			parametro.setLinhaSolicitante(converterParaInteiro( getParameter("linhaSolicitante")));
			parametro.setLinhaTratamento1(converterParaInteiro( getParameter("linhaTratamento1")));
			parametro.setLinhaTratamento2(converterParaInteiro( getParameter("linhaTratamento2")));
			parametro.setLinhaTratamento3(converterParaInteiro( getParameter("linhaTratamento3")));
			parametro.setLinhaTratamento4(converterParaInteiro( getParameter("linhaTratamento4")));
			parametro.setLinhaTratamento5(converterParaInteiro( getParameter("linhaTratamento5")));
			parametro.setLinhaUF(converterParaInteiro( getParameter("linhaUF")));
			parametro.setLinhaValor1(converterParaInteiro( getParameter("linhaValor1")));
			parametro.setLinhaValor2(converterParaInteiro( getParameter("linhaValor2")));
			parametro.setLinhaValor3(converterParaInteiro( getParameter("linhaValor3")));
			parametro.setLinhaValor4(converterParaInteiro( getParameter("linhaValor4")));
			parametro.setLinhaValor5(converterParaInteiro( getParameter("linhaValor5")));
			parametro.setLinhaValorTotal(converterParaInteiro( getParameter("linhaValorTotal")));
			parametro.setPessoaFisica(converterParaInteiro( getParameter("pessoaFisica")));
			parametro.setLinhaPessoafisica(converterParaInteiro(getParameter("linhaPessoafisica")));
			parametro.setLinhaPessoajuridica(converterParaInteiro(getParameter("linhaPessoajuridica")));
			parametro.setColunaPessoafisica(converterParaInteiro(getParameter("colunaPessoafisica")));
			parametro.setColunaPessoajuridica(converterParaInteiro(getParameter("colunaPessoajuridica")));
			parametro.setColunaCRO(converterParaInteiro(getParameter("colunaCro")));
		} catch (Exception e) {
			try {

				getAppletContext().showDocument(new URL("javascript:falha();"));

			} catch (MalformedURLException excpetion) {
				excpetion.printStackTrace();
			}
		}
		
		
	}
	
	public Integer converterParaInteiro(String texto) {
		try {
			return Integer.parseInt(texto);
		} catch (Exception e) {
			return null;
		}
	}

	public List<String> getTexto() {
		return texto;
	}

	public void setTexto(List<String> texto) {
		this.texto = texto;
	}

}
